import { ColDef, ICellRendererParams } from '@ag-grid-community/core'

import { IChannel } from '@oBiz/hooks/SWRApi/useChannels'

/** 路由渠道列表项 */
export type IChannelListItem = ITplRouteDetailRes['routeChannelList'][number]

/** columnDefs 配置项 */
export type TCol<T extends keyof IChannelListItem = keyof IChannelListItem> = ColDef<
  IChannelListItem,
  IChannelListItem[T]
> & { field: T }

/** cellRendererParams */
export type TCellParams<T extends keyof IChannelListItem = keyof IChannelListItem> = ICellRendererParams<
  IChannelListItem,
  IChannelListItem[T]
>

/** 路由模板详情请求响应 */
export interface ITplRouteDetailRes {
  /** 路由模板ID */
  routeId: string
  /** 路由节点，0.国内仓 1.起运港拖车 2.起运港 3.干线运输 4.目的港 5.目的港拖车 6.海外仓 7.尾程派送 8.目的地 */
  routeNode: number
  /** 路由编号 */
  routeNo: string
  /** 物流状态，0.待发货 1.报关中 2.运输中 3.清关中 4.中转中 5.派送中 6.已签收 */
  logisticsStatus: number
  /** 路由类型，1.正常 2.异常 */
  routeType: number
  /** 异常原因，0.监管异常 1.承运商异常 2.不可抗力异常 3.收件人异常 */
  errorType: number | null | undefined
  /** 客户可见，0.否 1.是 */
  visibleFlag: number
  /** 需跟进，0.否 1.是 */
  actionFlag: number
  /** 路由描述 */
  routeDesc: {
    /** ID（唯一标识） */
    descId: number
    /** 中文标题 */
    titleCn: string
    /** 英文标题 */
    titleEn: string
    /** 中文内容 */
    descCn: string | null | undefined
    /** 英文内容 */
    descEn: string | null | undefined
  }
  /** 路由渠道集合 */
  routeChannelList: IChannel[]
}

/** 新增或编辑时要提交的数据 */
export type TSendValues = Omit<ITplRouteDetailRes, 'routeId' | 'routeDesc'> & {
  /** 编辑时必传 */
  routeId?: ITplRouteDetailRes['routeId']
  /** 路由描述 */
  routeDesc: Omit<ITplRouteDetailRes['routeDesc'], 'descId'> & {
    /** 编辑时必传 */
    descId?: ITplRouteDetailRes['routeDesc']['descId']
  }
}

/** 表单数据 */
export type TFormValues = {
  [K in keyof TSendValues]: K extends 'routeNode' | 'logisticsStatus' // 必填项但初始值为空
    ? TSendValues[K] | undefined
    : [] extends TSendValues[K] // 有数组
      ? NonNullable<TSendValues[K]>
      : null extends TSendValues[K] // 有空值
        ? NonNullable<TSendValues[K]> | undefined
        : NonNullable<TSendValues[K]>
}
